home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Source Code / VirtualDub / sylia / ScriptValue.h < prev    next >
C/C++ Source or Header  |  2003-10-01  |  3KB  |  89 lines

  1. #ifndef f_SYLIA_SCRIPTVALUE_H
  2. #define f_SYLIA_SCRIPTVALUE_H
  3.  
  4. class CScriptArray;
  5. struct CScriptObject;
  6. class CScriptValue;
  7. class IScriptInterpreter;
  8. class VariableTableEntry;
  9.  
  10. typedef CScriptValue (*ScriptObjectLookupFuncPtr)(IScriptInterpreter *, CScriptObject *, void *lpVoid, char *szName);
  11. typedef CScriptValue (*ScriptFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
  12. typedef void (*ScriptVoidFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
  13. typedef int (*ScriptIntFunctionPtr)(IScriptInterpreter *, void *, CScriptValue *, int);
  14. typedef CScriptValue (*ScriptArrayFunctionPtr)(IScriptInterpreter *, void *, int);
  15.  
  16. typedef struct ScriptFunctionDef {
  17.     ScriptFunctionPtr func_ptr;
  18.     char *name;
  19.     char *arg_list;
  20. } ScriptFunctionDef;
  21.  
  22. typedef struct ScriptObjectDef {
  23.     char *name;
  24.     CScriptObject *obj;
  25. } ScriptObjectDef;
  26.  
  27. typedef struct CScriptObject {
  28.     ScriptObjectLookupFuncPtr Lookup;
  29.     ScriptFunctionDef        *func_list;
  30.     ScriptObjectDef            *obj_list;
  31. } CScriptObject;
  32.  
  33. class CScriptValue {
  34. public:
  35.     enum { T_VOID, T_INT, T_PINT, T_STR, T_ARRAY, T_OBJECT, T_FNAME, T_FUNCTION, T_VARLV } type;
  36.     CScriptObject *thisPtr;
  37.     union {
  38.         int i;
  39.         int *pi;
  40.         char **s;
  41.         ScriptArrayFunctionPtr ary;
  42.         CScriptObject *obj;
  43.         ScriptFunctionPtr func;
  44.         ScriptFunctionDef *fname;
  45.         VariableTableEntry *vte;
  46.     } u;
  47.     void *lpVoid;
  48.  
  49.     CScriptValue()                        { type = T_VOID; }
  50.     CScriptValue(int i)                    { type = T_INT;            u.i = i; }
  51.     CScriptValue(int *pi)                { type = T_PINT;        u.pi = pi; }
  52.     CScriptValue(char **s)                { type = T_STR;            u.s = s; }
  53.     CScriptValue(CScriptObject *obj)    { type = T_OBJECT;        u.obj = obj; }
  54.     CScriptValue(CScriptObject *_thisPtr, ScriptArrayFunctionPtr csa) {
  55.         type = T_ARRAY;
  56.         u.ary = csa;
  57.         thisPtr = _thisPtr;
  58.     }
  59.     CScriptValue(CScriptObject *_thisPtr, ScriptFunctionDef *sfd)    {
  60.         type = T_FNAME;
  61.         u.fname = sfd;
  62.         thisPtr = _thisPtr;
  63.     }
  64.     CScriptValue(CScriptObject *_thisPtr, ScriptFunctionPtr fn)    {
  65.         type = T_FUNCTION;
  66.         u.func = fn;
  67.         thisPtr = _thisPtr;
  68.     }
  69.     CScriptValue(VariableTableEntry *vte) { type = T_VARLV;        u.vte = vte; }
  70.  
  71.     bool isVoid()            { return type == T_VOID; }
  72.     bool isInt()            { return type == T_INT; }
  73.     bool isString()            { return type == T_STR; }
  74.     bool isArray()            { return type == T_ARRAY; }
  75.     bool isObject()            { return type == T_OBJECT; }
  76.     bool isFName()            { return type == T_FNAME; }
  77.     bool isFunction()        { return type == T_FUNCTION; }
  78.     bool isVarLV()            { return type == T_VARLV; }
  79.  
  80.     int                    asInt()            { return u.i; }
  81.     char **                asString()        { return u.s; }
  82.     ScriptArrayFunctionPtr        asArray()        { return u.ary; }
  83.     CScriptObject *        asObject()        { return u.obj; }
  84.     ScriptFunctionPtr    asFunction()    { return u.func; }
  85.     VariableTableEntry*    asVarLV()        { return u.vte; }
  86. };
  87.  
  88. #endif
  89.